{
 "cells": [
  {
   "cell_type": "code",
   "id": "initial_id",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2025-02-28T01:42:16.738363Z",
     "start_time": "2025-02-28T01:42:15.665950Z"
    }
   },
   "source": [
    "import json\n",
    "import pandas as pd\n",
    "\n",
    "# 简历数据\n",
    "with open('data/cv/0001.json', 'r', encoding='utf-8') as file:\n",
    "    data = json.load(file)\n",
    "print(data)\n",
    "# 企业招聘数据\n",
    "df = pd.read_excel(\"data/深圳技术大学2025年春季就业双选会岗位表.xlsx\", sheet_name=\"招聘需求\")"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'基本信息': {'性别': '男', '年龄': '21', '电话': '18929310862', '邮箱': 'pengxiaojiang@sztu.edu.cn', '籍贯': '广东省肇庆市'}, '意向岗位': {'类型': '实习', '城市': '深圳', '职位': '嵌入式软件开发', '行业': '信息传输、软件和信息技术服务业', '薪资': '4k-6k'}, '教育经历': {'专业': '自动化', '学历': '本科'}, '工作经历': '', '专业技能': '编程:热练掌握C、C++、Python编程语言，熟悉汇编语言;嵌入式:热练STM32 单片机项目开发，包括使用CubeMX，Keil环境开发，FreeRTOS编程:熟悉SPI、I2C、USB、UART接口协议:熟悉机器视觉OpenCV:软件:熟练使用Matlab、Labview编程，熟悉COMSOL Multiphysics建模;', '项目经历': '', '校内荣誉': '', '校内职务': '', '资格证书': '', '个人作品': ''}\n"
     ]
    }
   ],
   "execution_count": 1
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-02-27T07:53:31.920615Z",
     "start_time": "2025-02-27T07:53:31.905826Z"
    }
   },
   "cell_type": "code",
   "source": "df.head()",
   "id": "7caa815d85a10e4",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "              单位名称    岗位名称 工作性质     职位分类 工作城市  需求专业   学历要求  \\\n",
       "0  深圳市柏威国际科技物流有限公司  涉外法务助理   全职     法务助理  深圳市    法学  本科及以上   \n",
       "1  深圳市柏威国际科技物流有限公司  涉外财务助理   全职       财务  深圳市   会计学  本科及以上   \n",
       "2  深圳市柏威国际科技物流有限公司   空海外客服   全职  物流专员/助理  深圳市  市场营销  本科及以上   \n",
       "3  深圳市柏威国际科技物流有限公司   空海外客服   全职  物流专员/助理  深圳市  物流管理  本科及以上   \n",
       "4  深圳市柏威国际科技物流有限公司   空海外客服   全职  物流专员/助理  深圳市  电子商务  本科及以上   \n",
       "\n",
       "                                                岗位职责  \\\n",
       "0  1、负责公司各类合同及法律文件的起草和审核工作；2、代表公司非诉讼法律事务，维护公司合法权益...   \n",
       "1  1、协助海外代理应收款项的对账、按时安排付款等工作；2、协助与各分子公司对账,核对往来等;3...   \n",
       "2  1、与航空公司或同行定舱并确认仓位信息，及时将仓位信息反馈给客户和国外代理；2、负责及时安排...   \n",
       "3  1、与航空公司或同行定舱并确认仓位信息，及时将仓位信息反馈给客户和国外代理；2、负责及时安排...   \n",
       "4  1、与航空公司或同行定舱并确认仓位信息，及时将仓位信息反馈给客户和国外代理；2、负责及时安排...   \n",
       "\n",
       "                                                岗位要求  所需人数  最低薪资（K/月）  \\\n",
       "0  1、法学相关专业本科以上学历、英语六级，通过法律职业考试、英语口语流利优先；2、工作踏实细致...     2          6   \n",
       "1  1.财会或相关专业本科以上学历，取得会计初级证书，英语六级、口语流利；2.严谨、细致，逻辑思...     2          6   \n",
       "2  1、本科及以上学历，英语六级、口语流利优先，国贸、物流管理、英语等相关专业优先；2、抗压能力...     5          6   \n",
       "3  1、本科及以上学历，英语六级、口语流利优先，国贸、物流管理、英语等相关专业优先；2、抗压能力...     5          6   \n",
       "4  1、本科及以上学历，英语六级、口语流利优先，国贸、物流管理、英语等相关专业优先；2、抗压能力...     5          6   \n",
       "\n",
       "   最高薪资（K/月）    福利                      职位诱惑                     投递说明  \\\n",
       "0          8  六险一金                       NaN            通过法考、英语口语流利优先   \n",
       "1          8  五险一金                       NaN  前期在国内1-2年学习培养，后期可接受海外外派   \n",
       "2          8  六险一金  绩效奖金 节日礼物 扁平管理 年度旅游 免费班车                     两轮面试   \n",
       "3          8  六险一金  绩效奖金 节日礼物 扁平管理 年度旅游 免费班车                     两轮面试   \n",
       "4          8  六险一金  绩效奖金 节日礼物 扁平管理 年度旅游 免费班车                     两轮面试   \n",
       "\n",
       "                                                职位备注  \n",
       "0  在这里你可以得到：1、不定期的公司活动聚餐，唱K，下午茶、团队旅游；2、带薪休假，节假日福利...  \n",
       "1                                                NaN  \n",
       "2  在这里你可以得到：1、不定期的公司活动聚餐，唱K，下午茶、团队旅游；2、带薪休假，节假日福利...  \n",
       "3  在这里你可以得到：1、不定期的公司活动聚餐，唱K，下午茶、团队旅游；2、带薪休假，节假日福利...  \n",
       "4  在这里你可以得到：1、不定期的公司活动聚餐，唱K，下午茶、团队旅游；2、带薪休假，节假日福利...  "
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>单位名称</th>\n",
       "      <th>岗位名称</th>\n",
       "      <th>工作性质</th>\n",
       "      <th>职位分类</th>\n",
       "      <th>工作城市</th>\n",
       "      <th>需求专业</th>\n",
       "      <th>学历要求</th>\n",
       "      <th>岗位职责</th>\n",
       "      <th>岗位要求</th>\n",
       "      <th>所需人数</th>\n",
       "      <th>最低薪资（K/月）</th>\n",
       "      <th>最高薪资（K/月）</th>\n",
       "      <th>福利</th>\n",
       "      <th>职位诱惑</th>\n",
       "      <th>投递说明</th>\n",
       "      <th>职位备注</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>深圳市柏威国际科技物流有限公司</td>\n",
       "      <td>涉外法务助理</td>\n",
       "      <td>全职</td>\n",
       "      <td>法务助理</td>\n",
       "      <td>深圳市</td>\n",
       "      <td>法学</td>\n",
       "      <td>本科及以上</td>\n",
       "      <td>1、负责公司各类合同及法律文件的起草和审核工作；2、代表公司非诉讼法律事务，维护公司合法权益...</td>\n",
       "      <td>1、法学相关专业本科以上学历、英语六级，通过法律职业考试、英语口语流利优先；2、工作踏实细致...</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "      <td>六险一金</td>\n",
       "      <td>NaN</td>\n",
       "      <td>通过法考、英语口语流利优先</td>\n",
       "      <td>在这里你可以得到：1、不定期的公司活动聚餐，唱K，下午茶、团队旅游；2、带薪休假，节假日福利...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>深圳市柏威国际科技物流有限公司</td>\n",
       "      <td>涉外财务助理</td>\n",
       "      <td>全职</td>\n",
       "      <td>财务</td>\n",
       "      <td>深圳市</td>\n",
       "      <td>会计学</td>\n",
       "      <td>本科及以上</td>\n",
       "      <td>1、协助海外代理应收款项的对账、按时安排付款等工作；2、协助与各分子公司对账,核对往来等;3...</td>\n",
       "      <td>1.财会或相关专业本科以上学历，取得会计初级证书，英语六级、口语流利；2.严谨、细致，逻辑思...</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "      <td>五险一金</td>\n",
       "      <td>NaN</td>\n",
       "      <td>前期在国内1-2年学习培养，后期可接受海外外派</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>深圳市柏威国际科技物流有限公司</td>\n",
       "      <td>空海外客服</td>\n",
       "      <td>全职</td>\n",
       "      <td>物流专员/助理</td>\n",
       "      <td>深圳市</td>\n",
       "      <td>市场营销</td>\n",
       "      <td>本科及以上</td>\n",
       "      <td>1、与航空公司或同行定舱并确认仓位信息，及时将仓位信息反馈给客户和国外代理；2、负责及时安排...</td>\n",
       "      <td>1、本科及以上学历，英语六级、口语流利优先，国贸、物流管理、英语等相关专业优先；2、抗压能力...</td>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "      <td>六险一金</td>\n",
       "      <td>绩效奖金 节日礼物 扁平管理 年度旅游 免费班车</td>\n",
       "      <td>两轮面试</td>\n",
       "      <td>在这里你可以得到：1、不定期的公司活动聚餐，唱K，下午茶、团队旅游；2、带薪休假，节假日福利...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>深圳市柏威国际科技物流有限公司</td>\n",
       "      <td>空海外客服</td>\n",
       "      <td>全职</td>\n",
       "      <td>物流专员/助理</td>\n",
       "      <td>深圳市</td>\n",
       "      <td>物流管理</td>\n",
       "      <td>本科及以上</td>\n",
       "      <td>1、与航空公司或同行定舱并确认仓位信息，及时将仓位信息反馈给客户和国外代理；2、负责及时安排...</td>\n",
       "      <td>1、本科及以上学历，英语六级、口语流利优先，国贸、物流管理、英语等相关专业优先；2、抗压能力...</td>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "      <td>六险一金</td>\n",
       "      <td>绩效奖金 节日礼物 扁平管理 年度旅游 免费班车</td>\n",
       "      <td>两轮面试</td>\n",
       "      <td>在这里你可以得到：1、不定期的公司活动聚餐，唱K，下午茶、团队旅游；2、带薪休假，节假日福利...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>深圳市柏威国际科技物流有限公司</td>\n",
       "      <td>空海外客服</td>\n",
       "      <td>全职</td>\n",
       "      <td>物流专员/助理</td>\n",
       "      <td>深圳市</td>\n",
       "      <td>电子商务</td>\n",
       "      <td>本科及以上</td>\n",
       "      <td>1、与航空公司或同行定舱并确认仓位信息，及时将仓位信息反馈给客户和国外代理；2、负责及时安排...</td>\n",
       "      <td>1、本科及以上学历，英语六级、口语流利优先，国贸、物流管理、英语等相关专业优先；2、抗压能力...</td>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "      <td>六险一金</td>\n",
       "      <td>绩效奖金 节日礼物 扁平管理 年度旅游 免费班车</td>\n",
       "      <td>两轮面试</td>\n",
       "      <td>在这里你可以得到：1、不定期的公司活动聚餐，唱K，下午茶、团队旅游；2、带薪休假，节假日福利...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 11
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-02-27T08:21:49.910839Z",
     "start_time": "2025-02-27T08:21:49.899731Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 获取所有列名\n",
    "df.columns\n",
    "df[\"岗位要求\"][:5]"
   ],
   "id": "53f063e018595615",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['单位名称', '岗位名称', '工作性质', '职位分类', '工作城市', '需求专业', '学历要求', '岗位职责', '岗位要求',\n",
       "       '所需人数', '最低薪资（K/月）', '最高薪资（K/月）', '福利', '职位诱惑', '投递说明', '职位备注'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 17
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-02-27T08:07:27.420602Z",
     "start_time": "2025-02-27T08:07:27.407187Z"
    }
   },
   "cell_type": "code",
   "source": "data[\"专业技能\"]",
   "id": "35fd3fb05cd12dc8",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'编程:热练掌握C、C++、Python编程语言，熟悉汇编语言;嵌入式:热练STM32 单片机项目开发，包括使用CubeMX，Keil环境开发，FreeRTOS编程:熟悉SPI、I2C、USB、UART接口协议:熟悉机器视觉OpenCV:软件:熟练使用Matlab、Labview编程，熟悉COMSOL Multiphysics建模;'"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 15
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-02-28T01:42:49.511952Z",
     "start_time": "2025-02-28T01:42:21.699876Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 使用大模型对专业技能和要求打分\n",
    "from openai import OpenAI\n",
    "\n",
    "client = OpenAI(api_key=\"sk-430766cb68934151aaeae540823fea2f\", base_url=\"https://api.deepseek.com\")\n",
    "# https://qianfan.baidubce.com/v2\n",
    "\n",
    "prompt_template_v1 = \"\"\"\n",
    "请根据以下学生技能和企业职位要求，计算匹配得分（0-100分）。\n",
    "输出格式为 JSON，包含 `score` 字段。\n",
    "## 学生技能：\n",
    "{}\n",
    "## 企业要求：\n",
    "{}\n",
    "请基于以下规则评分：\n",
    "1. 技能关键词匹配度（如“Python” vs “Python编程”）\n",
    "2. 技能相关性（如“数据分析” vs “数据可视化”）\n",
    "3. 综合能力覆盖度\n",
    "\"\"\"\n",
    "prompt_template = \"\"\"\n",
    "请根据以下学生技能和企业职位要求，完成以下任务：\n",
    "1. 计算匹配得分（0-100分），评分依据包括技能关键词匹配、语义相关性、综合覆盖率。\n",
    "2. 列出所有匹配的技能对（学生技能与企业要求的对应项）。\n",
    "\n",
    "## 学生技能：\n",
    "{}\n",
    "\n",
    "## 企业要求：\n",
    "{}\n",
    "\n",
    "请基于以下规则评分：\n",
    "1. 技能关键词匹配度（如“Python” vs “Python编程”）\n",
    "2. 技能相关性（如“数据分析” vs “数据可视化”）\n",
    "3. 综合能力覆盖度\n",
    "\n",
    "输出格式为 JSON，包含以下字段：\n",
    "- `score`: 匹配得分\n",
    "- `matched_skills`: 匹配的技能对列表，每个元素格式为 {{\"student_skill\": \"学生技能\", \"job_skill\": \"企业要求\"}}\n",
    "\"\"\"\n",
    "\n",
    "def get_matching_score(student_skills, job_requirements):\n",
    "    # 构建提示词\n",
    "    prompt = prompt_template.format(student_skills, job_requirements)\n",
    "\n",
    "    # 调用 API\n",
    "    response = client.chat.completions.create(\n",
    "        model=\"deepseek-chat\",  # 替换为实际模型名称\n",
    "        messages=[{\"role\": \"user\", \"content\": prompt}],\n",
    "        temperature=0.1,  # 控制输出稳定性\n",
    "        response_format={\"type\": \"json_object\"}  # 强制返回 JSON\n",
    "    )\n",
    "\n",
    "    # 解析结果\n",
    "    try:\n",
    "        result = json.loads(response.choices[0].message.content)\n",
    "        print(result)\n",
    "        return result.get(\"score\", 0)\n",
    "    except Exception as e:\n",
    "        print(f\"解析失败: {e}\")\n",
    "        return 0\n",
    "\n",
    "# 示例调用\n",
    "student_skills = data[\"专业技能\"]\n",
    "print(student_skills)\n",
    "job_requirements1 = df[\"岗位要求\"][0]\n",
    "print(job_requirements1)\n",
    "job_requirements2 = df[\"岗位要求\"][288]\n",
    "print(job_requirements2)\n",
    "score = get_matching_score(student_skills, job_requirements1)\n",
    "print(f\"匹配得分：{score}/100\")\n",
    "score = get_matching_score(student_skills, job_requirements2)\n",
    "print(f\"匹配得分：{score}/100\")"
   ],
   "id": "37f51284b251a3f2",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "编程:热练掌握C、C++、Python编程语言，熟悉汇编语言;嵌入式:热练STM32 单片机项目开发，包括使用CubeMX，Keil环境开发，FreeRTOS编程:熟悉SPI、I2C、USB、UART接口协议:熟悉机器视觉OpenCV:软件:熟练使用Matlab、Labview编程，熟悉COMSOL Multiphysics建模;\n",
      "1、法学相关专业本科以上学历、英语六级，通过法律职业考试、英语口语流利优先；2、工作踏实细致、注重细节、思维严谨、逻辑性强；3、良好的沟通能力和团队合作精神；\n",
      "1. 具备扎实的C、C++或java编程基础，丰富的嵌入式经验2. 熟悉framework开发；3. 熟悉Android SDK4. 熟悉android系统下外设hal层软件的开发。5.具有其中一个或多个模块的开发经验，语言、地图、BT、TUNER、Media、Launcher6.有车机Android开发经验优先，熟悉车载智能座舱系统业务优先，了解CAN协议7.有Android系统应用(Launcher, SystemUI, Settings)开发经验优先，有Android源码开发实习经验优先。\n",
      "{'score': 0, 'matched_skills': []}\n",
      "匹配得分：0/100\n",
      "{'score': 60, 'matched_skills': [{'student_skill': '热练掌握C、C++、Python编程语言', 'job_skill': '具备扎实的C、C++或java编程基础'}, {'student_skill': '热练STM32 单片机项目开发，包括使用CubeMX，Keil环境开发，FreeRTOS编程', 'job_skill': '丰富的嵌入式经验'}, {'student_skill': '熟悉SPI、I2C、USB、UART接口协议', 'job_skill': '熟悉framework开发'}, {'student_skill': '熟悉机器视觉OpenCV', 'job_skill': '熟悉Android SDK'}, {'student_skill': '熟练使用Matlab、Labview编程，熟悉COMSOL Multiphysics建模', 'job_skill': '有Android系统应用(Launcher, SystemUI, Settings)开发经验优先'}]}\n",
      "匹配得分：60/100\n"
     ]
    }
   ],
   "execution_count": 2
  },
  {
   "metadata": {},
   "cell_type": "code",
   "outputs": [],
   "execution_count": null,
   "source": "# 待开发",
   "id": "96b2e0123755a79d"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "### 待开发\n",
    "- 使用流程：\n",
    "    - 一个线程在简历文件夹下检测是否有新简历进来，如有执行企业信息匹配\n",
    "    - 新企业信息加入（表格数据不好探测，是否要和就业中心系统开发商对接），企业需求去匹配学生能力，然后推送新企业给相应学生\n",
    "- 算法问题：（陈奥，马俊）        \n",
    "    - 加入更多字段进行综合匹配：如专业要求、性别要求（先用来过滤在跑匹配）等    \n",
    "    - 对所有企业相应信息做一次匹配，每位同学按照匹配分数排序、企业信息推送，短信（与信息中心对接，如何短信推送）### 核心\n",
    "\n",
    "- 人工进行审核判断，检查得分的准确性：用Gradio做个webUI，给就业中心老师测试即可（陈佳煜）\n",
    "    - 加载企业信息表格，上传一个json简历可以给出前3家企业信息展示\n",
    "\n",
    "\n",
    "- 数据问题：（何老师学生2）\n",
    "    - 企业岗位数据和就业中心系统对接，争取能够同步所有信息来源，并按照标准格式和算法对接\n"
   ],
   "id": "63c4645824a9cdc1"
  },
  {
   "metadata": {},
   "cell_type": "code",
   "outputs": [],
   "execution_count": null,
   "source": "",
   "id": "b61adbb319cc81a5"
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
